<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import="java.sql.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<title>测试数据库</title>
	</head>
	<body>
		<%
		
		//通过TCP的3306端口连接到mysql的具体的数据库mydb
		String DB_URL = "jdbc:mysql://localhost:8889/school?useUnicode=true&characterEncoding=utf-8";
		//用户名
		String DB_USER = "root";
		//密码
		String DB_PASSWORD = "root";
		
		try {
			/*以下代码为使用JDBC连接到mysql的通用方法
			 * 首先在classpath环境变量指定的所有的jar文件中查找数据库连接驱动com.mysql.jdbc.Driver
			 * 找到驱动之后使用DriverManager获取到数据库的连接
			 * */
			Class.forName("com.mysql.jdbc.Driver");
			Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
			
			/*将数据库的特征信息（即元数据metadata获取出来）*/
			DatabaseMetaData dbmd = conn.getMetaData();
			System.out.println(dbmd.getDatabaseProductName() + ", " + dbmd.getDatabaseProductVersion());
			System.out.println(dbmd.getDriverName() + ", " + dbmd.getDriverVersion());
			
			/*使用PreparedStatement的对象处理SQL语句
			 * 查询并显示所有的记录*/
			PreparedStatement smt = conn.prepareStatement("select * from student");
			ResultSet rs = smt.executeQuery();
			while(rs.next()){
				// System.out.print(rs.getInt("id") + "\t" + rs.getString("name") + "\t");
				%>
			<h4><% out.println(rs.getInt("id") + "\t" + rs.getString("name") + "\t"); %></h4>
				<% 
				boolean gender = rs.getBoolean("gender");
				// System.out.println(gender? "男" : "女");
				%>
				<h4><% out.print(gender? "男" : "女"); %></h4>
				<h4><% out.print(rs.getString("class")); %></h4>
				<% 
			}
			
			/*使用PreparedStatement的对象处理SQL语句
			 * insert SQL语句实际上给出了插入操作的模板，用于插入若干记录到student表当中
			 * 这个地方的insert SQL语句使用了两个问号，问号用于用户输入参数
			 * 根据student(name, gender)，第一个问号用于代表name字段，第二个问号代表gender字段*/
			smt = conn.prepareStatement("insert into student(name, gender) values(?, ?)");
			/*将insert SQL语句模板中的两个问号进行赋值*/
			smt.setString(1, "Jessica Simpson");
			smt.setBoolean(2, false);
			smt.executeUpdate();
			
			// smt.setString(1, "小明");
			// smt.setBoolean(2, true);			
			// smt.executeUpdate();
			smt =conn.prepareStatement("delete from student where name = '小明' ");
			smt.executeUpdate();
			
			/*使用了之后要记得关闭相应的连接*/
			rs.close();
			smt.close();
			conn.close();
			
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		%>
	</body>
</html>